package com.example.common.utils;

import net.bytebuddy.implementation.bytecode.Throw;
import org.apache.commons.lang3.exception.ExceptionUtils;

import java.io.PrintWriter;
import java.io.StringWriter;

/**
 * 错误信息处理类。
 */
public class ExceptionUtil {
    /**
     * 获取exception的详细异常信息。
     *
     * @param e 异常对象
     * @return 异常信息
     */
    public static String getExceptionMessage(Throwable e) {
        //StringWriter是一个字符流，用于将字符写入内存中的字符串缓冲区
        //PrintWriter是一个字符流，用于将字符写入到输出流中，
        // 这里是将异常栈信息写入到StringWriter中
        StringWriter sw = new StringWriter();
        //这里是将异常栈信息写入到StringWriter中，true表示自动刷新缓冲区
        e.printStackTrace(new PrintWriter(sw, true));
        return sw.toString();
    }

    /**
     * 获取异常的根cause
     *
     * @param e 异常对象
     * @return 根cause异常对象
     */

    public static String getRootErrorMessage(Exception e) {
        Throwable root = ExceptionUtils.getRootCause(e);
        root = root == null ? e : root;
        if (root == null) {
            return "";
        }
        String msg = root.getMessage();
        ////如果msg为null，则返回默认字符串"null"
        if (msg == null) {
            return "null";
        }
        //默认返回异常信息
        //defaultString方法是StringUtils类的一个静态方法，用于返回默认字符串
        //如果msg为null，则返回默认字符串"null"
        return StringUtils.defaultString(msg);
    }
}
